home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Collections: Franz PD
/
Franz PD Disk #194 (1992)(Rhein-Sieg-Soft).zip
/
Franz PD Disk #194 (1992)(Rhein-Sieg-Soft).adf
/
HERALD_V1.0
/
HERALD.DOK
< prev
next >
Wrap
Text File
|
1992-09-14
|
11KB
|
313 lines
HERALD V1.0
C
1992
by
Matthias Gutt
Kantstr. 16
W-2120 Lüneburg
Tel.:04131/49624
(20.30 - 21.30 Uhr)
1.0 Copyright-Hinweise
2.0 Programmidee & -funktion
3.0 Die `Guru-Meditationen`
1.0 Copyright-Hinweise
Das Programm `HERALD` ist PD-Software und darf frei weitergegeben werden !
Dieses Programm soll die endgültigen Fehlermeldungen des Amiga-Betriebs-
systems erklären.
Diesem Beitrag liegt auch der Quelltext, des in ASSEMBLER geschriebenen
Programmes, bei.
Das Programm `HERALD` wurde mit dem Assembler `masterseka v1.51` erstellt.
Sie können es auf jeder PD-Diskette veröffentlichen, solange keine Änderungen
am Binär-Code, am Quelltext und am ASCII-Text der Dokumentation vorgenommen
worden sind !
Es kann auch als Hilfsprogramm von der `startup-sequence` jeder Diskette
aufgerufen werden.
2.0 Programmidee & -funktion
Natürlich ist `HERALD` der `Guru-Dekoder` kein neues Programm - keine neue
Idee ...
Denn schon vor mir hatten andere Programmierer die Idee, ein Programm zu
schreiben, welches die komplizierten und Laien nur schwer verständlichen
Fehlermeldungen des AmigaDOS-Betriebssystems in verständlicher Sprache
übersetzt.
Aber es gibt ja auch unzählige `Label-Printer-Programme` in `AmigaBASIC`
und `GFA-BASIC` und trotzdem scheinen derartige Programme noch beliebt zu
sein !
Die Aufgabe den Anwender über Fehlfunktionen im Amiga zu informieren,
übernehmen also die `Guru`-Meldungen !
Doch leider gibt es zu wenige von ihnen, da es nicht selten vorkommt, daß
der Amiga mal total abstürzt, ohne sich vorher zu melden.
Meist bekommt man bei derartigen Gelegenheiten auch die Chance, zu sehen,
welche grafischen Fähigkeiten im Amiga stecken ...
Erscheinen `Guru`-Meldungen nun doch einmal, so weiß nicht jeder was sie
bedeuten, womit sie ihren Zweck wieder einmal nicht erfüllt hätten.
Leider führen viele `Guru`s sofort zum Absturz, was nicht immer notwendig
wäre.
Vor allem für Programmierer wäre es wichtig zu wissen, welcher Fehler sich
hinter einer bestimmten `Guru`-Meldung verbirgt.
Nicht selten gibt es für kompliziert wirkende `Guru`-Meldungen einfache
Erklärungen !
Auch für Anwender ist es wichtig zu wissen, warum ein bestimmtes Programm
abstürzt.
Diesen Informationsmangel zu decken, dient `HERALD` !
Das Programm kopiert sich absolut nach $7A000 in den Speicher und belegt 9kB.
Es verbiegt den Vektor der Routine DisplayAlert () auf die eigene Adresse
und wird so beim Ausgeben einer `Alert`-Meldung aktiviert !
`HERALD` gibt dann in maximal vier `Alert`s an, um welchen Type, ausgelöst
durch welches Subsystem, welcher Fehlerklasse und welchen Fehler es sich
handelt !
Anschließend wird der echte `Guru` gezeigt, damit Sie auch wissen, an welcher
Stelle das Programm im Speicher abgestürzt ist.
`HERALD` ist nicht resetfest.
Es erzeugt beim Starten einen eigenen `Alert` mit dem `Copyright`-Hinweis.
Die `Alert`s lassen sich durch Drücken einer beliebigen Maustaste wegklicken.
Sie können `HERALD` von der `startup-sequence` an erster Stelle aufrufen,
so daß es beim Absturz evtl. folgender Programme aktiviert wird.
Wenn Sie selbst programmieren und Ihr Programm sich noch in der Entwicklungs-
phase befindet und `Guru`s auslöst, so empfiehlt es sich, vor dem Starten
dieses Programmes `HERALD` zu starten, so daß Sie beim nächsten Absturz eine
genaue Fehlerbeschreibung erhalten !
3.0 Die `Guru-Meditationen`
Neben dem Text setzt sich eine `Guru`-Meldung vorwiegend aus zwei Hexadezimal-
Zahlen zusammen !
Dabei kennzeichnet die rechte Zahl die Stelle des abstürzenden Programmes
im Speicher und die linke stellt den Fehlervektor dar !
Uns interessiert diesmal nur der Fehlervektor, welcher aus acht Ziffern be-
steht !
Die erste Ziffer zeigt an, ob es sich um einen `RECOVERY-ALERT` oder um
einen `DEADEND-ALERT` handelt.
Die Ziffer `0` steht für einen `RECOVERY-ALERT` und die `8` für einen
`DEADEND-ALERT` !
Beispiel: #00000000 = `RECOVERY-ALERT`
#80000000 = `DEADEND-ALERT`
Ein `RECOVERY-ALERT` bricht nur das startende Programm ab, während hingegen
ein `DEADEND-ALERT` zum Reset führt !
Im ersten ``Alert` zeigt `HERALD` also den jeweiligen `ALERT-TYPE` an !
Die erste und die zweite Ziffer geben aber auch Aufschluß darüber, von welcher
Quelle die Fehlermeldung stammt.
Es wird also das Sub-System angedeutet:
Sub-System: Fehlervektor:
Der Prozessor #00000000
exec.library #01000000
graphics.library #02000000
layers.library #03000000
intuition.library #04000000
math.library #05000000
clist.library #06000000
dos.library #07000000
ram.library #08000000
icon.library #09000000
expansion.library #0A000000
audio.device #10000000
console.device #11000000
gameport.device #12000000
keyboard.device #13000000
trackdisk.device #14000000
timer.device #15000000
CIA #20000000
Disk #21000000
Misc #22000000
Bootstrap #30000000
Workbench #31000000
DiskCopy #32000000
Im zweiten `Alert` gibt `HERALD` also das `SUBSYSTEM` bekannt.
Die vierte Ziffer schließlich zeigt die Fehlerklasse an:
Fehlerklasse: Fehlervektor:
Speicherplatzmangel. #00010000
Fehler bei Aufbau der
Bibliothek. #00020000
Bibliothek konnte nicht
geöffnet werden. #00030000
Gerät konnte nicht geöffnet
werden. #00040000
Keine Hardware-Reaktion. #00050000
Eingabe/Ausgabe-Fehler. #00060000
I/O nicht verfügbar. #00070000
Der dritte `Alert` von `HERALD` beschreibt somit die Fehlerklasse.
Doch einer hält sich nicht ganz an diese Regeln und das ist der Prozessor
selbst !
Hier also die `TRAP-CODES`:
Fehlerbeschreibung: Fehlervektor:
Daten- oder Adreßbus-Fehler beim
Takten. #00000002
Adressierungsfehler. #00000003
( Dieser Fehler kommt ziemlich häufig vor - gerade bei Anfängern !
Er entsteht dann, wenn versucht wird eine ungerade Speicheradresse
langwortweise abzufragen, zu beschreiben oder zu vergleichen !
Ungerade Adressen in hexadezimal enden mit: 1,3,5,7,9,B und D
Abhilfe schafft: Die Adresse byteweise abzufragen oder den `Befehl`
`even` in ASSEMBLER zu verwenden ! )
Illegal Instruktion. #00000004
( Dieser Fehler kommt ähnlich häufig vor, wie der Adressierungsfehler !
Er wird durch den ASSEMBLER-Befehl `illegal` und durch jeden Befehl,
den der 68000-Prozessor nicht kennt verursacht !
Also eine Art `Syntax Error` des Betriebssystems ... )
Division durch Null. #00000005
( Diese Fehlermeldung dürfte auch von jedem Taschenrechner bekannt sein ! )
CHR Instruktion. #00000006
TRAPV Instruktion. #00000007
Privileg-Verletzung. #00000008
Einzelschrittmodus. #00000009
OpCode 1010. #0000000A
OpCode 1111. #0000000B
Nun kommen die Fehlermeldungen der Sub-Systeme:
exec.library:
#01000000 Prüfsummenfehler bei Prozessor-Ausnahmen.
#81000002 Fehlerhafte Prüfsumme der `ExecBase`-Struktur.
#81000003 Fehlerhafte Prüfsumme einer Systembibliothek.
#81000004 Speichermangel beim Öffnen einer Systembibliothek.
#81000005 Speicherlisteneintrag falsch.
#81000006 Zu wenig Speicherplatz für Interrupt.
#81000007 Fehlerhafter Vektor.
#81000008 Fehlerhafte Semaphore.
#81000009 Doppelte Freigabe des selben Speicherbereiches.
#8100000A Vektor-Fehler bei Ausnahme.
graphics.library:
#82010001 Speichermangel beim Erstellen der Copper-Liste.
#82010002 Speichermangel beim Erstellen der Copper-Instruktions-Liste.
#82010003 Cooper-Liste ist vollständig belegt.
#82010004 Aufteilungsfehler in der Copper-Liste.
#82010005 Speichermangel bei Erstellung des Copper-Listenkopfes.
#82010006 Speichermangel für `LONG FRAME`.
#82010007 Speichermangel für `SHORT FRAME`.
#82010008 Speichermangel beim Ausführen der Fill ()-Routine.
#82010009 Speichermangel beim Ausführen der Text ()-Routine.
#8201000A Speichermangel beim Erstellen der BlitterBitMap.
#8201000B Speicherbereich falsch.
#82010030 Fehler beim Ausstatten eines ViewPorts.
#82011234 GfxNoLCM ( kein Zwischenspeicher verfügbar ).
layers.library:
#03000001 Speichermangel beim Erstellen der `Layers`.
intuition.library:
#84000000 Unbekannter `Gadget`-Type.
#04000001 Typenfehler beim AN-`Gadget`.
#84010002 Speichermangel beim Erstellen eines Ports.
#04010003 Speichermangel beim Erstellen eines Menüs.
#04010004 Speichermangel beim Erstellen eines Sub-Menüs.
#84010005 Speicherplatz für Menü-Leiste reichte nicht aus.
#84000006 Position der Menü-Leiste fehlerhaft.
#84010007 Speichermangel beim Starten der OpenScreen ()-Routine.
#84010008 Speichermangel beim Erstellen eines RastPorts.
#84000009 `Screen`-Type unbekannt.
#8401000A Speicher reicht für `Gadget` nicht aus.
#8401000B Speicher reicht für Fenster nicht aus.
#8400000C Falscher Status im Status-Register beim Öffnen der Systembibliothek.
#8400000D Falsche Nachricht vom IDCMP empfangen.
#8400000E Nachrichten-Stapel droht überzulaufen.
#8400000F Speicher für `console.device` reicht nicht aus.
dos.library:
#07000001 Speichermangel beim StartUp.
#07000002 Task wurde nicht beendet.
#07000003 Optk-Fehler.
#07000004 Unerwartetes Datenpaket erhalten.
#07000005 Unerreichbarer freier Zeiger.
#07000006 Disk-Block hat fehlerhafte Daten.
#07000007 BitMap wurde zerstört.
#07000008 Key wurde bereits freigegeben.
#07000009 Fehlerhafte Prüfsumme.
#0700000A Disk Fehler.
#0700000B Key liegt außerhalb des zugelassenen Bereichs.
#0700000C Falsches Überschreiben.
ram.library:
#08000001 Verwaltungsliste: Fehleintrag.
expansion.library:
#0A000001 Hardware-Modifizierung fehlerhaft.
trackdisk.device:
#14000001 Fehler beim Suchen ...
#14000002 Verzögerung durch Timer-Impuls-Fehler.
timer.device:
#15000001 Zugriffsfehler.
#15000002 Durch Netzspannungsschwankungen entstandene Fehler bei der
Zeitkoordinierung.
disk.resource
#21000001 Die eingelegte Diskette konnte nicht erkannt werden.
#21000002 Unterbrechung, da kein Laufwerk angeschlossen ist.
bootstrap:
#30000001 `Bootblock`-Daten fehlerhaft.
Im letzten `Alert` gibt `HERALD` also die genaue Fehlerbeschreibung aus !
Ich selbst arbeite mit `KickStart V1.2`, die Werte aber reichen bis
`KickStart V1.3`.
Da `HERALD` bis auf den Speicherbereich relativ programmiert ist, dürfte
es unter anderen `KickStart`s keine Anpassungsschwierigkeiten geben.
Jedoch werden mit Sicherheit nicht ALLE `Guru`-Meldungen komplett ent-
schlüsselt werden können, da mir alle nicht bekannt sind !
Zumindest aber dürfte das Anzeigen des Sub-Systems und die Fehlerklasse
die Dekodierung des `Guru`s erleichtern.
BUG Rogers